package ai.people.platform.archives.service;

import ai.people.netmon.framework.domain.archives.request.ArchivesRequest;
import ai.people.netmon.framework.domain.archives.request.NetworkActivitiesRequest;
import ai.people.netmon.framework.domain.archives.vo.*;
import ai.people.netmon.framework.model.response.PageResponse;
import com.vesoft.nebula.client.graph.exception.IOErrorException;

import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * 说明
 *
 * @author zhenglin
 * @since 2022/3/23
 */
public interface ArchivesService {

    /**
     * 添加档案
     *
     * @param archives 档案
     * @return
     */
    String addArchives(ArchivesAddVO archives) throws InterruptedException, IOErrorException, UnsupportedEncodingException, ExecutionException;

    /**
     * 更新档案
     *
     * @param archives 档案
     */
    void updateArchives(ArchivesVO archives) throws InterruptedException, IOErrorException, UnsupportedEncodingException, ExecutionException;

    /**
     * 档案列表
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link ArchivesListVO}>
     */
    PageResponse<ArchivesListVO> listArchives(ArchivesRequest request);


    /**
     * 我档案列表
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link ArchivesListVO}>
     */
    PageResponse<ArchivesListVO> myListArchives(ArchivesRequest request);

    /**
     * 档案详情
     *
     * @param id id
     * @return {@link ArchivesDetailVO}
     */
    ArchivesDetailVO getArchives(Long id);

    /**
     * 网络活动列表
     *
     * @param request 请求
     * @return {@link PageResponse}<{@link NetworkActivitiesVO}>
     */
    PageResponse<NetworkActivitiesVO> listNetworkActivities(NetworkActivitiesRequest request);

    /**
     * 得到详细档案
     *
     * @param id id
     * @return {@link ArchivesDetail2VO}
     */
    ArchivesDetail2VO getArchivesDetail(Long id);

    /**
     * 得到隐藏档案
     *
     * @param id id
     * @return {@link ArchivesDetailVO}
     */
    ArchivesDetailVO getHideArchives(Long id);

    /**
     * 检查档案存在
     *
     * @param archivesId 档案id
     * @return boolean
     */
    boolean checkArchivesIsExists(Long archivesId);


    /**
     * 档案列表(团伙库)
     *
     * @return {@link PageResponse}<{@link GangGroupArchivesVO}>
     */
    List<GangGroupArchivesVO> listForGangGroup();

    /**
     * 档案详情(团伙库)
     *
     * @param id id
     * @return {@link GangGroupArchivesVO}
     */
    GangGroupArchivesVO getForGangGroup(Long id);
}
